/*
*	Project: Aethon
*
*	File: Scene.h
*
*	Author: Caleb Reinking
*
*	Date: 2/15/2009
*
*   Purpose: The scene is supposed to be  a messenger boy for the Director
*            class. The director gives high level commands to the Scene, then
*            the Scene passes on those low level commands and implementation
*            to the Terrain, Model, and PhysicsManager classes
*            Scene Class Specification File
*/

#ifndef SCENE_HEADER
#define SCENE_HEADER
#define MAX_SIZE 100

#include "../include/Timer.h"
#include "../include/Terrain.h"
#include "../include/PhysicsManager.h"
#include "../include/Model.h"

#include <vector>

//#############################################################################
class Scene{

    private:
       bool isPaused;
       int worldTime;  
	   Terrain terrain;
	   PhysicsManager physMan;
	   vector<Model> modelList;
	   int currentModIndex;
	
	public:	
	    //------------------- constructors ----------------------------------------
		//##########################################################################
		Scene()
		{
		   isPaused = true;
		   worldTime = 0;
		   terrain = Terrain();
		   physMan = PhysicsManager();
		   currentModIndex = 0;
		   
		}
		
		//------------------- gets and sets ---------------------------------------
		//##########################################################################
		void setIsPaused( bool pause ) 
		{
			 this->isPaused = pause;
		}//end setIsPaused
			
		//##########################################################################
		bool getIsPaused() 
		{
			 return this->isPaused;
		}//end getIsPaused
			
			
		//##########################################################################
		void setWorldTime( int wldTm ) 
		{
			 this->worldTime = wldTm;
		}//end setWorldTime
			
		//##########################################################################
		bool getWorldTime() 
		{
			 return this->worldTime;
		}//end getWorldTime
		
		//##########################################################################
		vector<Model>* getModListPtr()
		{
             return &modelList;
        }//end getModListPtr
        
        //##########################################################################
        string getCurrentModel()
        {
           return modelList[currentModIndex].getName();
        }//end getCurrentModel
        
        //##########################################################################
        int getCurrentModIndex()
        {
            return currentModIndex;
        }//end getCurrentModIndex
		
		//##########################################################################
		Terrain* getTerrainPtr()
		{
			return &terrain;
		}//end getTerrainPtr
		
		//##########################################################################
		float getTerrHeightAtPoint( float xPt, float zPt )
		{
              return terrain.getHeightAtPoint(xPt, zPt);
        }//end getTerrHeightAtPoint
		
		
		//##########################################################################
	    int startTime();
	    int updateTime();
	    void toggleNextControl();
	    void togglePreviousControl();
	    void toggleNextEye();
	    void load();
	    void display( int windowHeight, int windowWidth );
	    void viewOrtho(int x, int y);
	    void viewPerspective(void);
	    void insertModelIntoList( string modelName );
		void toggleCollisions();
};//end class

#endif //SCENE_HEADER

